package Task44;

import java.util.HashSet;
import java.util.Set;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        // 生成一个十万整数的随机数组
        int[] arr = new int[100000];
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(200000) - 100000; // 生成[-100000, 100000]范围内的整数
        }
        // 调用findZeroSum方法，找出两个相加为零的整数
        int[] result = findZeroSum(arr);
        // 输出结果
        if (result == null) {
            System.out.println("没有找到两个相加为零的整数");
        } else {
            System.out.println("找到了两个相加为零的整数：" + result[0] + " 和 " + result[1]);
        }
    }

    // 定义findZeroSum方法，使用哈希表法实现
    public static int[] findZeroSum(int[] arr) {
        // 创建一个哈希表，用于存储数组中每个元素及其对应的下标
        Map<Integer, Integer> map = new HashMap<>();
        // 遍历数组
        for (int i = 0; i < arr.length; i++) {
            // 判断哈希表中是否存在与当前元素互为相反数的元素
            if (map.containsKey(-arr[i])) {
                // 如果存在，则返回这两个元素组成的数组
                return new int[]{arr[i], -arr[i]};
            }
            // 如果不存在，则将当前元素及其下标放入哈希表中
            map.put(arr[i], i);
        }
        // 如果遍历完毕仍未找到满足条件的元素，则返回null
        return null;
    }
}

